#include "list.h"
#include "Element_data.h"
#include "login.h"
#include "func.h"
#include "file.h"
// 猜数字小游戏
void guess_number()
{
    srand(time(NULL));     // 使用当前时间作为随机种子
    int continue_flag = 1; // 定义是否继续游戏标识符
    while (continue_flag)
    {
        system("clear");
        int rand_num = rand() % 100 + 1; // 生成1到100之间的随机数
        int num;
        int min = 1;   // 最小值
        int max = 100; // 最大值
        printf("欢迎来到猜数字小游戏,请你输入[1-100]之间的数字开始游戏\n");
        while (1)
        {
            scanf("%d", &num);
            if (num > 100 || num < 1)
            {
                printf("你输入的数字无效!请重新输入:\n");
                continue;
            }
            if (num == rand_num)
            {
                printf("恭喜这位帅哥猜对了!你真是绝顶聪明!\n");
                puts("1-继续游戏\t0-返回菜单");
                scanf("%d", &continue_flag);
                if (continue_flag == 0)
                {
                    return;
                }
                break;
            }
            else if (num > rand_num)
            {
                printf("大了,在[%d,%d]之间,请重新输入:\n", min, num);
            }
            else
            {
                printf("小了,在[%d,%d]之间,请重新输入:\n", num, max);
            }
        }
    }
}

// 可控金字塔游戏
void pyramid()
{
    int contiue_flag = 1; // 游戏是否继续标识符
    while (contiue_flag)
    {
        system("clear");
        int h; // 金字塔层数
        puts("欢迎来到可控金字塔游戏!");
        printf("请输入你的金字塔高度:");
        scanf("%d", &h);
        for (int i = 1; i <= h; i++)
        {
            print_k(h - i); // 先打印空格,再打印*
            print_x(2 * i - 1);
            puts("");
        }
        puts("");
        puts("1-继续游戏\t0-返回菜单");
        scanf("%d", &contiue_flag);
        if (contiue_flag == 0)
        {
            return;
        }
    }
}
// 打印*
void print_x(int num)
{
    for (int i = 0; i < num; i++)
    {
        printf("*");
    }
}
// 打印空格
void print_k(int num)
{
    for (int i = 0; i < num; i++)
    {
        printf(" ");
    }
}

//选择游戏
void select_game()
{
    int num;
    printf("请选择游戏\n1-猜数字\t2-可控金子塔\n");
    scanf("%d",&num);
    if (num==1)
        guess_number();
    if (num == 2)
        pyramid();
}

// 根据学生成绩排等级
void level_grade(sq_list *L)
{
    //使用文件中的数据
    L= use_users(L,file_path);
    // 依次循环给学生成绩排等级
    for (int i = 0; i < L->len; i++)
    {
        if (L->data[i].grade >= 90)
        {
            L->data[i].level = 'A';
        }
        if (L->data[i].grade >= 80 && L->data[i].grade < 90)
        {
            L->data[i].level = 'B';
        }
        if (L->data[i].grade >= 70 && L->data[i].grade < 80)
        {
            L->data[i].level = 'C';
        }
        if (L->data[i].grade >= 60 && L->data[i].grade < 70)
        {
            L->data[i].level = 'E';
        }
        if (L->data[i].grade < 60)
        {
            L->data[i].level = 'F';
        }
    }

}

// 根据学生成绩排序
void rank_grade(sq_list *L)
{
    // 使用文件中的数据
    L = use_users(L, file_path);
    // 降序冒泡排序
    stu temp_user;                     // 临时用户结构体,用户交换结构体数据
   
    for (int i = 0; i < L->len - 1; i++) // 控制趟数
    {
        for (int j = 0; j < L->len - 1 - i; j++) // 控制交换次数
        {
            if (L->data[j].grade < L->data[j + 1].grade)
            {
                // 交换学生里面的所有信息
                temp_user = L->data[j];
                L->data[j] = L->data[j + 1];
                L->data[j + 1] = temp_user;
            }
        }
    }
    // 将排名写入到学生信息中去
    for (int k = 0; k < L->len; k++)
    {
        L->data[k].rank = k + 1;
    }
    // 输出学生排名后的成绩
    printf("|排名\t|名字\t|性别\t|学号\t|成绩\t|等级\t|\n");
    for (int i = 0; i < L->len; i++)
    {
        printf("|%d\t|%s\t|%s\t|%d\t|%d\t|%c\t|\n",
               L->data[i].rank, L->data[i].name, L->data[i].sex, L->data[i].id, L->data[i].grade, L->data[i].level);
    }
}


//  随机生成学生信息,并写入到本地文件中
void creat_stu(sq_list *L)
{
    //判断顺序表数据是否已经满了
    if (!IsFull_Sql_List(L))
    {
        return;
    }
    int num;
    printf("请你输入需要生成学生信息的个数:\n");
    scanf("%d",&num);
    srand(time(NULL)); //  初始化随机数生成器
    for (int i = 0; i < num; i++)
    {
        // 随机生成学生名字
        // 定义《三国演义》人物名字数组
        char *names[] = {
            "刘备", "关羽", "张飞", "诸葛亮", "赵云", "马超", "黄忠", "魏延", "姜维", "庞统",
            "法正", "曹操", "曹丕", "曹植", "司马懿", "郭嘉", "荀彧", "夏侯惇", "夏侯渊", "张辽",
            "徐晃", "张郃", "许褚", "典韦", "孙权", "周瑜", "陆逊", "吕蒙", "鲁肃", "黄盖",
            "太史慈", "甘宁", "周泰", "凌统", "程普", "韩当", "袁绍", "袁术", "刘表", "刘璋",
            "董卓", "吕布", "貂蝉", "陈宫", "高顺", "张角", "张宝", "张梁", "华雄", "颜良",
            "文丑", "公孙瓒", "孟获", "祝融", "于吉", "左慈"};
        int namesSize = sizeof(names) / sizeof(names[0]);
        // 随机选择一个名字
        int nameIndex = rand() % namesSize;
        strcpy(L->data[i+Line_Num].name, names[nameIndex]);

        //随机生成性别
        strcpy(L->data[i + Line_Num].sex, rand() % 2 ? "男" : "女");

        //随机生成年龄
        L->data[i + Line_Num].age = rand() % 50 + 10;

        //随机生成学号
        L->data[i + Line_Num].id = i + 2407;

        // 随机生成学生成绩
        L->data[i + Line_Num].grade = rand() % 100;

        //默认密码为666
        strcpy(L->data[i + Line_Num].password, "666");
    }
    // L= num + L->len; // 更新学生个数
    // printf_Sql_List(L);
    save_users(L, file_path, "a+",num);
    printf("已随机生成%d个学生信息,并写入到文件%s!\n", num,file_path);
}
